// 引入express插件包并生成一个实例app
const express = require("express");
const app = express();

// 使用body-parser中间件解析post请求主体
app.use(express.urlencoded({ extended: false }));
app.use(express.json());

//jwt安装并导入 JWT 相关的两个包，分别是 jsonwebtoken 和 express-jwt
const expressJWT = require("express-jwt");
const secretKey = require("./util/const").secretKey;

app.use(
  expressJWT({ secret: secretKey, algorithms: ["HS256"] }).unless({
    path: [/^\/sys\//]
  })
);

// 引入业务路由
const Router = require("./routers");
for (key in Router) {
  app.use(Router[key]);
}

//使用全局错误处理中间件，捕获解析 JWT 失败后产生的错误
app.use((err, req, res, next) => {
  console.log("err", err);

  // 这次错误是由 token 解析失败导致的
  if (err.name === "UnauthorizedError") {
    return res.send(401, {
      status: 401,
      code: 401,
      msg: "无效的token"
    });
  }
  res.send(500, {
    status: 500,
    code: 500,
    msg: "发生意外,未知的错误",
    err
  });
});

// 在9999端口上启动后端服务
app.listen(8091, (req, res) => {
  console.log("后端服务端口地址为：localhost://8091");
});
